%module OgreOverlay

%{
#include "OGRE/OgreOverlay.h"
	%}

%import "OgrePrerequisites.i"
%import "OgreSceneNode.i"
//#include "OgreIteratorWrappers.h"
//#include "OgreMatrix4.h"

namespace Ogre {

	%nodefaultctor Overlay;
	class Overlay // : public OverlayAlloc
    {

//              typedef list<OverlayContainer*>::type OverlayContainerList;

        /// Constructor: do not call direct, use OverlayManager::create
//        Overlay(const String& name);
        virtual ~Overlay();


	OverlayContainer* getChild(const String& name);

        const String& getName(void) const;

        void setZOrder(ushort zorder);

        ushort getZOrder(void) const;


        bool isVisible(void) const;

	bool isInitialised(void) const { return mInitialised; }

        void show(void);

        void hide(void);

        void add2D(OverlayContainer* cont);

        void remove2D(OverlayContainer* cont);

        void add3D(SceneNode* node);

        void remove3D(SceneNode* node);

        void clear();

        void setScroll(Real x, Real y);

        Real getScrollX(void) const;

        Real getScrollY(void) const;

        void scroll(Real xoff, Real yoff);

        void setRotate(const Radian& angle);

        const Radian &getRotate(void) const { return mRotate; }

        void rotate(const Radian& angle);

        void setScale(Real x, Real y);

        Real getScaleX(void) const;

        Real getScaleY(void) const;

//        void _getWorldTransforms(Matrix4* xform) const;

//        void _findVisibleObjects(Camera* cam, RenderQueue* queue);

	virtual OverlayElement* findElementAt(Real x, Real y);

//        typedef VectorIterator<OverlayContainerList> Overlay2DElementsIterator ;
//       Overlay2DElementsIterator get2DElementsIterator ();

	const String& getOrigin(void) const { return mOrigin; }

    };
}
